﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Net.Sockets;
using System.IO;

namespace ftpd_console
{
    class Helpers
    {
        //Разделитель для отсылки слов клиенту
        public static char word_separator = ' ';
        //Разделитель каталогов
        public static char dir_separator = '\\';
        //Длинна передаваемого слова в потоке данных (байт)
        public static int buffer_lenght = 4096;
        //Порт передачи данных (изменяется по мере подключения)
        private static int dataPort = 40000;
        //Порт клиента
        private static int bindPort = 22;

        //Возвращаем порт данных и увеличиваем его на один
        public static int GetDataPort()
        {
            return dataPort++;
        }

        //Возвращаем порт клиента
        public static int GetBindPort()
        {
            return bindPort;
        }

        public static bool WriteLine(NetworkStream stream, String line)
        {
            if (stream != null)
            {
                //StreamWriter writter = new StreamWriter(stream, Encoding.Default);
                try
                {
                    
                    byte[] bytes = Encoding.UTF8.GetBytes(line + "\r\n");
                    //Encoding.Convert(Encoding.Default, Encoding., bytes);
                    //Console.WriteLine(Encoding.Default.EncodingName);
                    //writter.WriteLine(line);
                    //writter.Write("\r\n");
                    stream.Write(bytes, 0, bytes.Length);
                    return true;
                }
                catch (SocketException e)
                {
                    Console.WriteLine(e.StackTrace);
                    return false;
                }
            }
            Console.WriteLine("WriteLine: stream doesn't exists!");
            return false;
        }

        //Находим родительский каталог из строки
        public static string GetPreviousDir(string dir)
        {
            //Делим всю строку на названия всех каталогов
            string[] words = dir.Split(dir_separator);
            if (words.Length < 3)
            {
                return dir_separator.ToString();
            }
            //Создаем строку для возврата
            string ret = "";// = dir_separator.ToString();
            for (int i = 0; i < words.Length - 2; i++ )
            {
                ret += words[i] + dir_separator.ToString();
            }
            return ret;
        }

        //Извлечение параметра из сообщения
        public static string GetParameter(string line)
        {
            //Удаляем все пробелы в начале
            string param = line.TrimStart(' ');
            //Узнаем, сколько символов занимает сама команда
            int len = param.Split(' ')[0].Length;
            //Возвращаем все, что после команды
            return param.Substring(len + 1);
        }
    }
}
